/**
 * @file gpio.h
 * @version 1.0
 * @date 2012-08-06
 * @brief General-Purpose Input/Outputs
 *
 * This header file defined for General-Purpose Input/Outputs.
 */

#ifndef __GPIO_H__
#define __GPIO_H__	 

//
///* ----------------------------------------------------------------------------
//   -- PORT
//   ---------------------------------------------------------------------------- */
//
///**
// * @addtogroup PORT_Peripheral PORT
// * @{
// */
//
///** PORT - Peripheral register structure */
////typedef struct PORT_MemMap {
////  unsigned long PCR[32];                                /**< Pin Control Register n, array offset: 0x0, array step: 0x4 */
////  unsigned long GPCLR;                                  /**< Global Pin Control Low Register, offset: 0x80 */
////  unsigned long GPCHR;                                  /**< Global Pin Control High Register, offset: 0x84 */
////  unsigned char RESERVED_0[24];
////  unsigned long ISFR;                                   /**< Interrupt Status Flag Register, offset: 0xA0 */
////  unsigned char RESERVED_1[28];
////  unsigned long DFER;                                   /**< Digital Filter Enable Register, offset: 0xC0 */
////  unsigned long DFCR;                                   /**< Digital Filter Clock Register, offset: 0xC4 */
////  unsigned long DFWR;                                   /**< Digital Filter Width Register, offset: 0xC8 */
////} volatile *PORT_MemMapPtr;
//
///* ----------------------------------------------------------------------------
//   -- PORT - Register accessor macros
//   ---------------------------------------------------------------------------- */
//
///**
// * @addtogroup PORT_Register_Accessor_Macros PORT - Register accessor macros
// * @{
// */
//
//
///* PORT - Register accessors */
//#define PORT_PCR_REG(base,index)                 ((base)->PCR[index])
//#define PORT_GPCLR_REG(base)                     ((base)->GPCLR)
//#define PORT_GPCHR_REG(base)                     ((base)->GPCHR)
//#define PORT_ISFR_REG(base)                      ((base)->ISFR)
//#define PORT_DFER_REG(base)                      ((base)->DFER)
//#define PORT_DFCR_REG(base)                      ((base)->DFCR)
//#define PORT_DFWR_REG(base)                      ((base)->DFWR)
//
///**
// * @}
// */ /* end of group PORT_Register_Accessor_Macros */
//
//
///* ----------------------------------------------------------------------------
//   -- PORT Register Masks
//   ---------------------------------------------------------------------------- */
//
///**
// * @addtogroup PORT_Register_Masks PORT Register Masks
// * @{
// */
//
///* PCR Bit Fields */
//#define PORT_PCR_PS_MASK                         0x1u
//#define PORT_PCR_PS_SHIFT                        0
//#define PORT_PCR_PE_MASK                         0x2u
//#define PORT_PCR_PE_SHIFT                        1
//#define PORT_PCR_SRE_MASK                        0x4u
//#define PORT_PCR_SRE_SHIFT                       2
//#define PORT_PCR_PFE_MASK                        0x10u
//#define PORT_PCR_PFE_SHIFT                       4
//#define PORT_PCR_ODE_MASK                        0x20u
//#define PORT_PCR_ODE_SHIFT                       5
//#define PORT_PCR_DSE_MASK                        0x40u
//#define PORT_PCR_DSE_SHIFT                       6
//#define PORT_PCR_MUX_MASK                        0x700u
//#define PORT_PCR_MUX_SHIFT                       8
////#define PORT_PCR_MUX(x)                          (((unsigned long)(((unsigned long)(x))<<PORT_PCR_MUX_SHIFT))&PORT_PCR_MUX_MASK)
//#define PORT_PCR_LK_MASK                         0x8000u
//#define PORT_PCR_LK_SHIFT                        15
//#define PORT_PCR_IRQC_MASK                       0xF0000u
//#define PORT_PCR_IRQC_SHIFT                      16
////#define PORT_PCR_IRQC(x)                         (((unsigned long)(((unsigned long)(x))<<PORT_PCR_IRQC_SHIFT))&PORT_PCR_IRQC_MASK)
//#define PORT_PCR_ISF_MASK                        0x1000000u
//#define PORT_PCR_ISF_SHIFT                       24
///* GPCLR Bit Fields */
//#define PORT_GPCLR_GPWD_MASK                     0xFFFFu
//#define PORT_GPCLR_GPWD_SHIFT                    0
////#define PORT_GPCLR_GPWD(x)                       (((unsigned long)(((unsigned long)(x))<<PORT_GPCLR_GPWD_SHIFT))&PORT_GPCLR_GPWD_MASK)
//#define PORT_GPCLR_GPWE_MASK                     0xFFFF0000u
//#define PORT_GPCLR_GPWE_SHIFT                    16
////#define PORT_GPCLR_GPWE(x)                       (((unsigned long)(((unsigned long)(x))<<PORT_GPCLR_GPWE_SHIFT))&PORT_GPCLR_GPWE_MASK)
///* GPCHR Bit Fields */
//#define PORT_GPCHR_GPWD_MASK                     0xFFFFu
//#define PORT_GPCHR_GPWD_SHIFT                    0
////#define PORT_GPCHR_GPWD(x)                       (((unsigned long)(((unsigned long)(x))<<PORT_GPCHR_GPWD_SHIFT))&PORT_GPCHR_GPWD_MASK)
//#define PORT_GPCHR_GPWE_MASK                     0xFFFF0000u
//#define PORT_GPCHR_GPWE_SHIFT                    16
//#define PORT_GPCHR_GPWE(x)                       (((unsigned long)(((unsigned long)(x))<<PORT_GPCHR_GPWE_SHIFT))&PORT_GPCHR_GPWE_MASK)
///* ISFR Bit Fields */
//#define PORT_ISFR_ISF_MASK                       0xFFFFFFFFu
//#define PORT_ISFR_ISF_SHIFT                      0
//#define PORT_ISFR_ISF(x)                         (((unsigned long)(((unsigned long)(x))<<PORT_ISFR_ISF_SHIFT))&PORT_ISFR_ISF_MASK)
///* DFER Bit Fields */
//#define PORT_DFER_DFE_MASK                       0xFFFFFFFFu
//#define PORT_DFER_DFE_SHIFT                      0
//#define PORT_DFER_DFE(x)                         (((unsigned long)(((unsigned long)(x))<<PORT_DFER_DFE_SHIFT))&PORT_DFER_DFE_MASK)
///* DFCR Bit Fields */
//#define PORT_DFCR_CS_MASK                        0x1u
//#define PORT_DFCR_CS_SHIFT                       0
///* DFWR Bit Fields */
//#define PORT_DFWR_FILT_MASK                      0x1Fu
//#define PORT_DFWR_FILT_SHIFT                     0
//#define PORT_DFWR_FILT(x)                        (((unsigned long)(((unsigned long)(x))<<PORT_DFWR_FILT_SHIFT))&PORT_DFWR_FILT_MASK)
//
///**
// * @}
// */ /* end of group PORT_Register_Masks */
//
//
///* PORT - Peripheral instance base addresses */
///** Peripheral PORTA base pointer */
//#define PORTA_BASE_PTR                           ((PORT_MemMapPtr)0x40049000u)
///** Peripheral PORTB base pointer */
//#define PORTB_BASE_PTR                           ((PORT_MemMapPtr)0x4004A000u)
///** Peripheral PORTC base pointer */
//#define PORTC_BASE_PTR                           ((PORT_MemMapPtr)0x4004B000u)
///** Peripheral PORTD base pointer */
//#define PORTD_BASE_PTR                           ((PORT_MemMapPtr)0x4004C000u)
///** Peripheral PORTE base pointer */
//#define PORTE_BASE_PTR                           ((PORT_MemMapPtr)0x4004D000u)
//
///* ----------------------------------------------------------------------------
//   -- PORT - Register accessor macros
//   ---------------------------------------------------------------------------- */
//
///**
// * @addtogroup PORT_Register_Accessor_Macros PORT - Register accessor macros
// * @{
// */
//
//
///* PORT - Register instance definitions */
///* PORTA */
//#define PORTA_PCR0                               PORT_PCR_REG(PORTA_BASE_PTR,0)
//#define PORTA_PCR1                               PORT_PCR_REG(PORTA_BASE_PTR,1)
//#define PORTA_PCR2                               PORT_PCR_REG(PORTA_BASE_PTR,2)
//#define PORTA_PCR3                               PORT_PCR_REG(PORTA_BASE_PTR,3)
//#define PORTA_PCR4                               PORT_PCR_REG(PORTA_BASE_PTR,4)
//#define PORTA_PCR5                               PORT_PCR_REG(PORTA_BASE_PTR,5)
//#define PORTA_PCR6                               PORT_PCR_REG(PORTA_BASE_PTR,6)
//#define PORTA_PCR7                               PORT_PCR_REG(PORTA_BASE_PTR,7)
//#define PORTA_PCR8                               PORT_PCR_REG(PORTA_BASE_PTR,8)
//#define PORTA_PCR9                               PORT_PCR_REG(PORTA_BASE_PTR,9)
//#define PORTA_PCR10                              PORT_PCR_REG(PORTA_BASE_PTR,10)
//#define PORTA_PCR11                              PORT_PCR_REG(PORTA_BASE_PTR,11)
//#define PORTA_PCR12                              PORT_PCR_REG(PORTA_BASE_PTR,12)
//#define PORTA_PCR13                              PORT_PCR_REG(PORTA_BASE_PTR,13)
//#define PORTA_PCR14                              PORT_PCR_REG(PORTA_BASE_PTR,14)
//#define PORTA_PCR15                              PORT_PCR_REG(PORTA_BASE_PTR,15)
//#define PORTA_PCR16                              PORT_PCR_REG(PORTA_BASE_PTR,16)
//#define PORTA_PCR17                              PORT_PCR_REG(PORTA_BASE_PTR,17)
//#define PORTA_PCR18                              PORT_PCR_REG(PORTA_BASE_PTR,18)
//#define PORTA_PCR19                              PORT_PCR_REG(PORTA_BASE_PTR,19)
//#define PORTA_PCR20                              PORT_PCR_REG(PORTA_BASE_PTR,20)
//#define PORTA_PCR21                              PORT_PCR_REG(PORTA_BASE_PTR,21)
//#define PORTA_PCR22                              PORT_PCR_REG(PORTA_BASE_PTR,22)
//#define PORTA_PCR23                              PORT_PCR_REG(PORTA_BASE_PTR,23)
//#define PORTA_PCR24                              PORT_PCR_REG(PORTA_BASE_PTR,24)
//#define PORTA_PCR25                              PORT_PCR_REG(PORTA_BASE_PTR,25)
//#define PORTA_PCR26                              PORT_PCR_REG(PORTA_BASE_PTR,26)
//#define PORTA_PCR27                              PORT_PCR_REG(PORTA_BASE_PTR,27)
//#define PORTA_PCR28                              PORT_PCR_REG(PORTA_BASE_PTR,28)
//#define PORTA_PCR29                              PORT_PCR_REG(PORTA_BASE_PTR,29)
//#define PORTA_PCR30                              PORT_PCR_REG(PORTA_BASE_PTR,30)
//#define PORTA_PCR31                              PORT_PCR_REG(PORTA_BASE_PTR,31)
//#define PORTA_GPCLR                              PORT_GPCLR_REG(PORTA_BASE_PTR)
//#define PORTA_GPCHR                              PORT_GPCHR_REG(PORTA_BASE_PTR)
//#define PORTA_ISFR                               PORT_ISFR_REG(PORTA_BASE_PTR)
//#define PORTA_DFER                               PORT_DFER_REG(PORTA_BASE_PTR)
//#define PORTA_DFCR                               PORT_DFCR_REG(PORTA_BASE_PTR)
//#define PORTA_DFWR                               PORT_DFWR_REG(PORTA_BASE_PTR)
///* PORTB */
//#define PORTB_PCR0                               PORT_PCR_REG(PORTB_BASE_PTR,0)
//#define PORTB_PCR1                               PORT_PCR_REG(PORTB_BASE_PTR,1)
//#define PORTB_PCR2                               PORT_PCR_REG(PORTB_BASE_PTR,2)
//#define PORTB_PCR3                               PORT_PCR_REG(PORTB_BASE_PTR,3)
//#define PORTB_PCR4                               PORT_PCR_REG(PORTB_BASE_PTR,4)
//#define PORTB_PCR5                               PORT_PCR_REG(PORTB_BASE_PTR,5)
//#define PORTB_PCR6                               PORT_PCR_REG(PORTB_BASE_PTR,6)
//#define PORTB_PCR7                               PORT_PCR_REG(PORTB_BASE_PTR,7)
//#define PORTB_PCR8                               PORT_PCR_REG(PORTB_BASE_PTR,8)
//#define PORTB_PCR9                               PORT_PCR_REG(PORTB_BASE_PTR,9)
//#define PORTB_PCR10                              PORT_PCR_REG(PORTB_BASE_PTR,10)
//#define PORTB_PCR11                              PORT_PCR_REG(PORTB_BASE_PTR,11)
//#define PORTB_PCR12                              PORT_PCR_REG(PORTB_BASE_PTR,12)
//#define PORTB_PCR13                              PORT_PCR_REG(PORTB_BASE_PTR,13)
//#define PORTB_PCR14                              PORT_PCR_REG(PORTB_BASE_PTR,14)
//#define PORTB_PCR15                              PORT_PCR_REG(PORTB_BASE_PTR,15)
//#define PORTB_PCR16                              PORT_PCR_REG(PORTB_BASE_PTR,16)
//#define PORTB_PCR17                              PORT_PCR_REG(PORTB_BASE_PTR,17)
//#define PORTB_PCR18                              PORT_PCR_REG(PORTB_BASE_PTR,18)
//#define PORTB_PCR19                              PORT_PCR_REG(PORTB_BASE_PTR,19)
//#define PORTB_PCR20                              PORT_PCR_REG(PORTB_BASE_PTR,20)
//#define PORTB_PCR21                              PORT_PCR_REG(PORTB_BASE_PTR,21)
//#define PORTB_PCR22                              PORT_PCR_REG(PORTB_BASE_PTR,22)
//#define PORTB_PCR23                              PORT_PCR_REG(PORTB_BASE_PTR,23)
//#define PORTB_PCR24                              PORT_PCR_REG(PORTB_BASE_PTR,24)
//#define PORTB_PCR25                              PORT_PCR_REG(PORTB_BASE_PTR,25)
//#define PORTB_PCR26                              PORT_PCR_REG(PORTB_BASE_PTR,26)
//#define PORTB_PCR27                              PORT_PCR_REG(PORTB_BASE_PTR,27)
//#define PORTB_PCR28                              PORT_PCR_REG(PORTB_BASE_PTR,28)
//#define PORTB_PCR29                              PORT_PCR_REG(PORTB_BASE_PTR,29)
//#define PORTB_PCR30                              PORT_PCR_REG(PORTB_BASE_PTR,30)
//#define PORTB_PCR31                              PORT_PCR_REG(PORTB_BASE_PTR,31)
//#define PORTB_GPCLR                              PORT_GPCLR_REG(PORTB_BASE_PTR)
//#define PORTB_GPCHR                              PORT_GPCHR_REG(PORTB_BASE_PTR)
//#define PORTB_ISFR                               PORT_ISFR_REG(PORTB_BASE_PTR)
//#define PORTB_DFER                               PORT_DFER_REG(PORTB_BASE_PTR)
//#define PORTB_DFCR                               PORT_DFCR_REG(PORTB_BASE_PTR)
//#define PORTB_DFWR                               PORT_DFWR_REG(PORTB_BASE_PTR)
///* PORTC */
//#define PORTC_PCR0                               PORT_PCR_REG(PORTC_BASE_PTR,0)
//#define PORTC_PCR1                               PORT_PCR_REG(PORTC_BASE_PTR,1)
//#define PORTC_PCR2                               PORT_PCR_REG(PORTC_BASE_PTR,2)
//#define PORTC_PCR3                               PORT_PCR_REG(PORTC_BASE_PTR,3)
//#define PORTC_PCR4                               PORT_PCR_REG(PORTC_BASE_PTR,4)
//#define PORTC_PCR5                               PORT_PCR_REG(PORTC_BASE_PTR,5)
//#define PORTC_PCR6                               PORT_PCR_REG(PORTC_BASE_PTR,6)
//#define PORTC_PCR7                               PORT_PCR_REG(PORTC_BASE_PTR,7)
//#define PORTC_PCR8                               PORT_PCR_REG(PORTC_BASE_PTR,8)
//#define PORTC_PCR9                               PORT_PCR_REG(PORTC_BASE_PTR,9)
//#define PORTC_PCR10                              PORT_PCR_REG(PORTC_BASE_PTR,10)
//#define PORTC_PCR11                              PORT_PCR_REG(PORTC_BASE_PTR,11)
//#define PORTC_PCR12                              PORT_PCR_REG(PORTC_BASE_PTR,12)
//#define PORTC_PCR13                              PORT_PCR_REG(PORTC_BASE_PTR,13)
//#define PORTC_PCR14                              PORT_PCR_REG(PORTC_BASE_PTR,14)
//#define PORTC_PCR15                              PORT_PCR_REG(PORTC_BASE_PTR,15)
//#define PORTC_PCR16                              PORT_PCR_REG(PORTC_BASE_PTR,16)
//#define PORTC_PCR17                              PORT_PCR_REG(PORTC_BASE_PTR,17)
//#define PORTC_PCR18                              PORT_PCR_REG(PORTC_BASE_PTR,18)
//#define PORTC_PCR19                              PORT_PCR_REG(PORTC_BASE_PTR,19)
//#define PORTC_PCR20                              PORT_PCR_REG(PORTC_BASE_PTR,20)
//#define PORTC_PCR21                              PORT_PCR_REG(PORTC_BASE_PTR,21)
//#define PORTC_PCR22                              PORT_PCR_REG(PORTC_BASE_PTR,22)
//#define PORTC_PCR23                              PORT_PCR_REG(PORTC_BASE_PTR,23)
//#define PORTC_PCR24                              PORT_PCR_REG(PORTC_BASE_PTR,24)
//#define PORTC_PCR25                              PORT_PCR_REG(PORTC_BASE_PTR,25)
//#define PORTC_PCR26                              PORT_PCR_REG(PORTC_BASE_PTR,26)
//#define PORTC_PCR27                              PORT_PCR_REG(PORTC_BASE_PTR,27)
//#define PORTC_PCR28                              PORT_PCR_REG(PORTC_BASE_PTR,28)
//#define PORTC_PCR29                              PORT_PCR_REG(PORTC_BASE_PTR,29)
//#define PORTC_PCR30                              PORT_PCR_REG(PORTC_BASE_PTR,30)
//#define PORTC_PCR31                              PORT_PCR_REG(PORTC_BASE_PTR,31)
//#define PORTC_GPCLR                              PORT_GPCLR_REG(PORTC_BASE_PTR)
//#define PORTC_GPCHR                              PORT_GPCHR_REG(PORTC_BASE_PTR)
//#define PORTC_ISFR                               PORT_ISFR_REG(PORTC_BASE_PTR)
//#define PORTC_DFER                               PORT_DFER_REG(PORTC_BASE_PTR)
//#define PORTC_DFCR                               PORT_DFCR_REG(PORTC_BASE_PTR)
//#define PORTC_DFWR                               PORT_DFWR_REG(PORTC_BASE_PTR)
///* PORTD */
//#define PORTD_PCR0                               PORT_PCR_REG(PORTD_BASE_PTR,0)
//#define PORTD_PCR1                               PORT_PCR_REG(PORTD_BASE_PTR,1)
//#define PORTD_PCR2                               PORT_PCR_REG(PORTD_BASE_PTR,2)
//#define PORTD_PCR3                               PORT_PCR_REG(PORTD_BASE_PTR,3)
//#define PORTD_PCR4                               PORT_PCR_REG(PORTD_BASE_PTR,4)
//#define PORTD_PCR5                               PORT_PCR_REG(PORTD_BASE_PTR,5)
//#define PORTD_PCR6                               PORT_PCR_REG(PORTD_BASE_PTR,6)
//#define PORTD_PCR7                               PORT_PCR_REG(PORTD_BASE_PTR,7)
//#define PORTD_PCR8                               PORT_PCR_REG(PORTD_BASE_PTR,8)
//#define PORTD_PCR9                               PORT_PCR_REG(PORTD_BASE_PTR,9)
//#define PORTD_PCR10                              PORT_PCR_REG(PORTD_BASE_PTR,10)
//#define PORTD_PCR11                              PORT_PCR_REG(PORTD_BASE_PTR,11)
//#define PORTD_PCR12                              PORT_PCR_REG(PORTD_BASE_PTR,12)
//#define PORTD_PCR13                              PORT_PCR_REG(PORTD_BASE_PTR,13)
//#define PORTD_PCR14                              PORT_PCR_REG(PORTD_BASE_PTR,14)
//#define PORTD_PCR15                              PORT_PCR_REG(PORTD_BASE_PTR,15)
//#define PORTD_PCR16                              PORT_PCR_REG(PORTD_BASE_PTR,16)
//#define PORTD_PCR17                              PORT_PCR_REG(PORTD_BASE_PTR,17)
//#define PORTD_PCR18                              PORT_PCR_REG(PORTD_BASE_PTR,18)
//#define PORTD_PCR19                              PORT_PCR_REG(PORTD_BASE_PTR,19)
//#define PORTD_PCR20                              PORT_PCR_REG(PORTD_BASE_PTR,20)
//#define PORTD_PCR21                              PORT_PCR_REG(PORTD_BASE_PTR,21)
//#define PORTD_PCR22                              PORT_PCR_REG(PORTD_BASE_PTR,22)
//#define PORTD_PCR23                              PORT_PCR_REG(PORTD_BASE_PTR,23)
//#define PORTD_PCR24                              PORT_PCR_REG(PORTD_BASE_PTR,24)
//#define PORTD_PCR25                              PORT_PCR_REG(PORTD_BASE_PTR,25)
//#define PORTD_PCR26                              PORT_PCR_REG(PORTD_BASE_PTR,26)
//#define PORTD_PCR27                              PORT_PCR_REG(PORTD_BASE_PTR,27)
//#define PORTD_PCR28                              PORT_PCR_REG(PORTD_BASE_PTR,28)
//#define PORTD_PCR29                              PORT_PCR_REG(PORTD_BASE_PTR,29)
//#define PORTD_PCR30                              PORT_PCR_REG(PORTD_BASE_PTR,30)
//#define PORTD_PCR31                              PORT_PCR_REG(PORTD_BASE_PTR,31)
//#define PORTD_GPCLR                              PORT_GPCLR_REG(PORTD_BASE_PTR)
//#define PORTD_GPCHR                              PORT_GPCHR_REG(PORTD_BASE_PTR)
//#define PORTD_ISFR                               PORT_ISFR_REG(PORTD_BASE_PTR)
//#define PORTD_DFER                               PORT_DFER_REG(PORTD_BASE_PTR)
//#define PORTD_DFCR                               PORT_DFCR_REG(PORTD_BASE_PTR)
//#define PORTD_DFWR                               PORT_DFWR_REG(PORTD_BASE_PTR)
///* PORTE */
//#define PORTE_PCR0                               PORT_PCR_REG(PORTE_BASE_PTR,0)
//#define PORTE_PCR1                               PORT_PCR_REG(PORTE_BASE_PTR,1)
//#define PORTE_PCR2                               PORT_PCR_REG(PORTE_BASE_PTR,2)
//#define PORTE_PCR3                               PORT_PCR_REG(PORTE_BASE_PTR,3)
//#define PORTE_PCR4                               PORT_PCR_REG(PORTE_BASE_PTR,4)
//#define PORTE_PCR5                               PORT_PCR_REG(PORTE_BASE_PTR,5)
//#define PORTE_PCR6                               PORT_PCR_REG(PORTE_BASE_PTR,6)
//#define PORTE_PCR7                               PORT_PCR_REG(PORTE_BASE_PTR,7)
//#define PORTE_PCR8                               PORT_PCR_REG(PORTE_BASE_PTR,8)
//#define PORTE_PCR9                               PORT_PCR_REG(PORTE_BASE_PTR,9)
//#define PORTE_PCR10                              PORT_PCR_REG(PORTE_BASE_PTR,10)
//#define PORTE_PCR11                              PORT_PCR_REG(PORTE_BASE_PTR,11)
//#define PORTE_PCR12                              PORT_PCR_REG(PORTE_BASE_PTR,12)
//#define PORTE_PCR13                              PORT_PCR_REG(PORTE_BASE_PTR,13)
//#define PORTE_PCR14                              PORT_PCR_REG(PORTE_BASE_PTR,14)
//#define PORTE_PCR15                              PORT_PCR_REG(PORTE_BASE_PTR,15)
//#define PORTE_PCR16                              PORT_PCR_REG(PORTE_BASE_PTR,16)
//#define PORTE_PCR17                              PORT_PCR_REG(PORTE_BASE_PTR,17)
//#define PORTE_PCR18                              PORT_PCR_REG(PORTE_BASE_PTR,18)
//#define PORTE_PCR19                              PORT_PCR_REG(PORTE_BASE_PTR,19)
//#define PORTE_PCR20                              PORT_PCR_REG(PORTE_BASE_PTR,20)
//#define PORTE_PCR21                              PORT_PCR_REG(PORTE_BASE_PTR,21)
//#define PORTE_PCR22                              PORT_PCR_REG(PORTE_BASE_PTR,22)
//#define PORTE_PCR23                              PORT_PCR_REG(PORTE_BASE_PTR,23)
//#define PORTE_PCR24                              PORT_PCR_REG(PORTE_BASE_PTR,24)
//#define PORTE_PCR25                              PORT_PCR_REG(PORTE_BASE_PTR,25)
//#define PORTE_PCR26                              PORT_PCR_REG(PORTE_BASE_PTR,26)
//#define PORTE_PCR27                              PORT_PCR_REG(PORTE_BASE_PTR,27)
//#define PORTE_PCR28                              PORT_PCR_REG(PORTE_BASE_PTR,28)
//#define PORTE_PCR29                              PORT_PCR_REG(PORTE_BASE_PTR,29)
//#define PORTE_PCR30                              PORT_PCR_REG(PORTE_BASE_PTR,30)
//#define PORTE_PCR31                              PORT_PCR_REG(PORTE_BASE_PTR,31)
//#define PORTE_GPCLR                              PORT_GPCLR_REG(PORTE_BASE_PTR)
//#define PORTE_GPCHR                              PORT_GPCHR_REG(PORTE_BASE_PTR)
//#define PORTE_ISFR                               PORT_ISFR_REG(PORTE_BASE_PTR)
//#define PORTE_DFER                               PORT_DFER_REG(PORTE_BASE_PTR)
//#define PORTE_DFCR                               PORT_DFCR_REG(PORTE_BASE_PTR)
//#define PORTE_DFWR                               PORT_DFWR_REG(PORTE_BASE_PTR)
//
///* PORT - Register array accessors */
//#define PORTA_PCR(index)                         PORT_PCR_REG(PORTA_BASE_PTR,index)
//#define PORTB_PCR(index)                         PORT_PCR_REG(PORTB_BASE_PTR,index)
//#define PORTC_PCR(index)                         PORT_PCR_REG(PORTC_BASE_PTR,index)
//#define PORTD_PCR(index)                         PORT_PCR_REG(PORTD_BASE_PTR,index)
//#define PORTE_PCR(index)                         PORT_PCR_REG(PORTE_BASE_PTR,index)
//
///**
// * @}
// */ /* end of group PORT_Register_Accessor_Macros */
//
//
///**
// * @}
// */ /* end of group PORT_Peripheral */
//
//
///* ----------------------------------------------------------------------------
//   -- GPIO
//   ---------------------------------------------------------------------------- */
//
///**
// * @addtogroup GPIO_Peripheral GPIO
// * @{
// */
//
///** GPIO - Peripheral register structure */
////typedef struct GPIO_MemMap {
////  unsigned long PDOR;                                   /**< Port Data Output Register, offset: 0x0 */
////  unsigned long PSOR;                                   /**< Port Set Output Register, offset: 0x4 */
////  unsigned long PCOR;                                   /**< Port Clear Output Register, offset: 0x8 */
////  unsigned long PTOR;                                   /**< Port Toggle Output Register, offset: 0xC */
////  unsigned long PDIR;                                   /**< Port Data Input Register, offset: 0x10 */
////  unsigned long PDDR;                                   /**< Port Data Direction Register, offset: 0x14 */
////} volatile *GPIO_MemMapPtr;
//
///* ----------------------------------------------------------------------------
//   -- GPIO - Register accessor macros
//   ---------------------------------------------------------------------------- */
//
///**
// * @addtogroup GPIO_Register_Accessor_Macros GPIO - Register accessor macros
// * @{
// */
//
//
///* GPIO - Register accessors */
//#define GPIO_PDOR_REG(base)                      ((base)->PDOR)
//#define GPIO_PSOR_REG(base)                      ((base)->PSOR)
//#define GPIO_PCOR_REG(base)                      ((base)->PCOR)
//#define GPIO_PTOR_REG(base)                      ((base)->PTOR)
//#define GPIO_PDIR_REG(base)                      ((base)->PDIR)
//#define GPIO_PDDR_REG(base)                      ((base)->PDDR)
//
///**
// * @}
// */ /* end of group GPIO_Register_Accessor_Macros */
//
//
///* ----------------------------------------------------------------------------
//   -- GPIO Register Masks
//   ---------------------------------------------------------------------------- */
//
///**
// * @addtogroup GPIO_Register_Masks GPIO Register Masks
// * @{
// */
//
///* PDOR Bit Fields */
//#define GPIO_PDOR_PDO_MASK                       0xFFFFFFFFu
//#define GPIO_PDOR_PDO_SHIFT                      0
//#define GPIO_PDOR_PDO(x)                         (((unsigned long)(((unsigned long)(x))<<GPIO_PDOR_PDO_SHIFT))&GPIO_PDOR_PDO_MASK)
///* PSOR Bit Fields */
//#define GPIO_PSOR_PTSO_MASK                      0xFFFFFFFFu
//#define GPIO_PSOR_PTSO_SHIFT                     0
//#define GPIO_PSOR_PTSO(x)                        (((unsigned long)(((unsigned long)(x))<<GPIO_PSOR_PTSO_SHIFT))&GPIO_PSOR_PTSO_MASK)
///* PCOR Bit Fields */
//#define GPIO_PCOR_PTCO_MASK                      0xFFFFFFFFu
//#define GPIO_PCOR_PTCO_SHIFT                     0
//#define GPIO_PCOR_PTCO(x)                        (((unsigned long)(((unsigned long)(x))<<GPIO_PCOR_PTCO_SHIFT))&GPIO_PCOR_PTCO_MASK)
///* PTOR Bit Fields */
//#define GPIO_PTOR_PTTO_MASK                      0xFFFFFFFFu
//#define GPIO_PTOR_PTTO_SHIFT                     0
//#define GPIO_PTOR_PTTO(x)                        (((unsigned long)(((unsigned long)(x))<<GPIO_PTOR_PTTO_SHIFT))&GPIO_PTOR_PTTO_MASK)
///* PDIR Bit Fields */
//#define GPIO_PDIR_PDI_MASK                       0xFFFFFFFFu
//#define GPIO_PDIR_PDI_SHIFT                      0
//#define GPIO_PDIR_PDI(x)                         (((unsigned long)(((unsigned long)(x))<<GPIO_PDIR_PDI_SHIFT))&GPIO_PDIR_PDI_MASK)
///* PDDR Bit Fields */
//#define GPIO_PDDR_PDD_MASK                       0xFFFFFFFFu
//#define GPIO_PDDR_PDD_SHIFT                      0
//#define GPIO_PDDR_PDD(x)                         (((unsigned long)(((unsigned long)(x))<<GPIO_PDDR_PDD_SHIFT))&GPIO_PDDR_PDD_MASK)
//
///**
// * @}
// */ /* end of group GPIO_Register_Masks */
//
//
///* GPIO - Peripheral instance base addresses */
///** Peripheral PTA base pointer */
//#define PTA_BASE_PTR                             ((GPIO_MemMapPtr)0x400FF000u)
///** Peripheral PTB base pointer */
//#define PTB_BASE_PTR                             ((GPIO_MemMapPtr)0x400FF040u)
///** Peripheral PTC base pointer */
//#define PTC_BASE_PTR                             ((GPIO_MemMapPtr)0x400FF080u)
///** Peripheral PTD base pointer */
//#define PTD_BASE_PTR                             ((GPIO_MemMapPtr)0x400FF0C0u)
///** Peripheral PTE base pointer */
//#define PTE_BASE_PTR                             ((GPIO_MemMapPtr)0x400FF100u)
//
///* ----------------------------------------------------------------------------
//   -- GPIO - Register accessor macros
//   ---------------------------------------------------------------------------- */
//
///**
// * @addtogroup GPIO_Register_Accessor_Macros GPIO - Register accessor macros
// * @{
// */
//
//
///* GPIO - Register instance definitions */
///* PTA */
//#define GPIOA_PDOR                               GPIO_PDOR_REG(PTA_BASE_PTR)
//#define GPIOA_PSOR                               GPIO_PSOR_REG(PTA_BASE_PTR)
//#define GPIOA_PCOR                               GPIO_PCOR_REG(PTA_BASE_PTR)
//#define GPIOA_PTOR                               GPIO_PTOR_REG(PTA_BASE_PTR)
//#define GPIOA_PDIR                               GPIO_PDIR_REG(PTA_BASE_PTR)
//#define GPIOA_PDDR                               GPIO_PDDR_REG(PTA_BASE_PTR)
///* PTB */
//#define GPIOB_PDOR                               GPIO_PDOR_REG(PTB_BASE_PTR)
//#define GPIOB_PSOR                               GPIO_PSOR_REG(PTB_BASE_PTR)
//#define GPIOB_PCOR                               GPIO_PCOR_REG(PTB_BASE_PTR)
//#define GPIOB_PTOR                               GPIO_PTOR_REG(PTB_BASE_PTR)
//#define GPIOB_PDIR                               GPIO_PDIR_REG(PTB_BASE_PTR)
//#define GPIOB_PDDR                               GPIO_PDDR_REG(PTB_BASE_PTR)
///* PTC */
//#define GPIOC_PDOR                               GPIO_PDOR_REG(PTC_BASE_PTR)
//#define GPIOC_PSOR                               GPIO_PSOR_REG(PTC_BASE_PTR)
//#define GPIOC_PCOR                               GPIO_PCOR_REG(PTC_BASE_PTR)
//#define GPIOC_PTOR                               GPIO_PTOR_REG(PTC_BASE_PTR)
//#define GPIOC_PDIR                               GPIO_PDIR_REG(PTC_BASE_PTR)
//#define GPIOC_PDDR                               GPIO_PDDR_REG(PTC_BASE_PTR)
///* PTD */
//#define GPIOD_PDOR                               GPIO_PDOR_REG(PTD_BASE_PTR)
//#define GPIOD_PSOR                               GPIO_PSOR_REG(PTD_BASE_PTR)
//#define GPIOD_PCOR                               GPIO_PCOR_REG(PTD_BASE_PTR)
//#define GPIOD_PTOR                               GPIO_PTOR_REG(PTD_BASE_PTR)
//#define GPIOD_PDIR                               GPIO_PDIR_REG(PTD_BASE_PTR)
//#define GPIOD_PDDR                               GPIO_PDDR_REG(PTD_BASE_PTR)
///* PTE */
//#define GPIOE_PDOR                               GPIO_PDOR_REG(PTE_BASE_PTR)
//#define GPIOE_PSOR                               GPIO_PSOR_REG(PTE_BASE_PTR)
//#define GPIOE_PCOR                               GPIO_PCOR_REG(PTE_BASE_PTR)
//#define GPIOE_PTOR                               GPIO_PTOR_REG(PTE_BASE_PTR)
//#define GPIOE_PDIR                               GPIO_PDIR_REG(PTE_BASE_PTR)
//#define GPIOE_PDDR                               GPIO_PDDR_REG(PTE_BASE_PTR)
//
///**
// * @}
// */ /* end of group GPIO_Register_Accessor_Macros */
//
//
///**
// * @}
// */ /* end of group GPIO_Peripheral */


#define GPIO_PIN_0              0x00000001  // GPIO pin 0
#define GPIO_PIN_1              0x00000002  // GPIO pin 1
#define GPIO_PIN_2              0x00000004  // GPIO pin 2
#define GPIO_PIN_3              0x00000008  // GPIO pin 3
#define GPIO_PIN_4              0x00000010  // GPIO pin 4
#define GPIO_PIN_5              0x00000020  // GPIO pin 5
#define GPIO_PIN_6              0x00000040  // GPIO pin 6
#define GPIO_PIN_7              0x00000080  // GPIO pin 7
#define GPIO_PIN_8              0x00000100  // GPIO pin 0
#define GPIO_PIN_9              0x00000200  // GPIO pin 1
#define GPIO_PIN_10             0x00000400  // GPIO pin 2
#define GPIO_PIN_11             0x00000800  // GPIO pin 3
#define GPIO_PIN_12             0x00001000  // GPIO pin 4
#define GPIO_PIN_13             0x00002000  // GPIO pin 5
#define GPIO_PIN_14             0x00004000  // GPIO pin 6
#define GPIO_PIN_15             0x00008000  // GPIO pin 7
#define GPIO_PIN_16             0x00010000  // GPIO pin 0
#define GPIO_PIN_17             0x00020000  // GPIO pin 1
#define GPIO_PIN_18             0x00040000  // GPIO pin 2
#define GPIO_PIN_19             0x00080000  // GPIO pin 3
#define GPIO_PIN_20             0x00100000  // GPIO pin 4
#define GPIO_PIN_21             0x00200000  // GPIO pin 5
#define GPIO_PIN_22             0x00400000  // GPIO pin 6
#define GPIO_PIN_23             0x00800000  // GPIO pin 7
#define GPIO_PIN_24             0x01000000  // GPIO pin 4
#define GPIO_PIN_25             0x02000000  // GPIO pin 5
#define GPIO_PIN_26             0x04000000  // GPIO pin 6
#define GPIO_PIN_27             0x08000000  // GPIO pin 7
#define GPIO_PIN_28             0x10000000  // GPIO pin 4
#define GPIO_PIN_29             0x20000000  // GPIO pin 5
#define GPIO_PIN_30             0x40000000  // GPIO pin 6
#define GPIO_PIN_31             0x80000000  // GPIO pin 7

#define GPIO_DIR_MODE_IN        0x00000000
#define GPIO_DIR_MODE_OUT   	0x00000001
#define GPIO_STRENGTH_HIGH		0x00000040

//spi
#define	GPIO_PE0_SPI1PCS1		0x
#define	GPIO_PE1_SPI1TX
#define	GPIO_PE2_SPI1SCK
#define	GPIO_PE3_SPI1RX
#define	GPIO_PE4_SPI1PCS0
#define	GPIO_PE4_SPI1PCS2
#define	GPIO_PE5_SPI1PCS3
#define	GPIO_PA14_SPI0PCS0
#define	GPIO_PA15_SPI0SCK
#define	GPIO_PA16_SPI0TX
#define	GPIO_PA17_SPI0RX
#define	GPIO_PB9_SPI1PCS1
#define	GPIO_PB10_SPI1PCS0
#define	GPIO_PB11_SPI1SCK
#define	GPIO_PB16_SPI1TX
#define	GPIO_PB17_SPI1RX
#define	GPIO_PB20_SPI2PCS0
#define	GPIO_PB21_SPI2SCK
#define	GPIO_PB22_SPI2TX
#define	GPIO_PB23_SPI2RX
#define	GPIO_PC0_SPI0PCS4
#define	GPIO_PC1_SPI0PCS3
#define	GPIO_PC2_SPI0PCS2
#define	GPIO_PC3_SPI0PCS1
#define	GPIO_PC4_SPI0PCS0
#define	GPIO_PC5_SPI0SCK
#define	GPIO_PC6_SPI0TX
#define	GPIO_PC7_SPI0RX
#define	GPIO_PD0_SPI0PCS0
#define	GPIO_PD1_SPI0SCK
#define	GPIO_PD2_SPI0TX
#define	GPIO_PD3_SPI0RX
#define	GPIO_PD4_SPI0PCS1
#define	GPIO_PD5_SPI0PCS2
#define	GPIO_PD6_SPI0PCS3
#define	GPIO_PD11_SPI2PCS0
#define	GPIO_PD12_SPI2SCK
#define	GPIO_PD13_SPI2TX
#define	GPIO_PD14_SPI2RX
#define	GPIO_PD15_SPI2PCS1

extern void GPIOPinToggle(GPIO_MemMapPtr ulPort, unsigned long ulPins);
extern void GPIOPinSet(GPIO_MemMapPtr ulPort, unsigned long ulPins);
extern void GPIOPinClear(GPIO_MemMapPtr ulPort, unsigned long ulPins);
extern void GPIOPortSet(GPIO_MemMapPtr ulPort, unsigned long ulVal);
extern unsigned long GPIOPortRead(GPIO_MemMapPtr ulPort);
extern void GPIOPinTypeOutput(PORT_MemMapPtr ulPort, unsigned long ulPin);
extern void GPIOPinTypeInput(PORT_MemMapPtr ulPort, unsigned long ulPin);
extern void GPIOPinDSESet(PORT_MemMapPtr ulPort, unsigned long ulPin,
				  unsigned long ulStrength);
extern void GPIOPinODESet(PORT_MemMapPtr ulPort, unsigned long ulPin,
				  unsigned long ulPinType);
extern void GPIODigitalFilterConfigSet(PORT_MemMapPtr ulPort, unsigned long ulClockSource, 
						   unsigned long ulFilterLength);
extern void GPIOPinTypeSPI(unsigned long ulPinType);

#endif//__GPIO_H__


